
import string

def create_dict(filename):
    """读文件中的单词及释义，以单词为键，其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔，但单词与第一个释义间至少有一个空格，
    将读文件并根据空格切分一次，切分结果分别作为键和值创新字典。"""
    dic = {}                                    # 创建空字典
    with open(filename, 'r', encoding='utf-8') as data:
        for x in data:                          # 遍历文件对象
            x = x.strip().split(maxsplit=1)     # 每行根据空格切分为列表，只切分一次
            dic.update({x[0].lower(): x[1]})             # 列表的两个元素作为字典的键和值加入字典中
    return dic


def translate(dic, word):
    """接收根据文件创建的字典，从中查询单词word，
    如果查询单词存在，元组形式返回词与词的释义；
    如果查询不存在，返回'这个词我不明白'"""
    word = word.lower()                         # 单词转小写
    return word, dic.get(word,'这个词我不明白')   # 查询字典，返回单词的意义，单词不存在时，返回'这个词我不明白'


def sentence_to_words():
    """调用此函数时，先输出提示信息'请输入查询的句子：'
    用户输入欲查询翻译的句子，若直接输入回车时，输出'查询结束，正在退出...'。
    输入非空时，先将"n't"替换为 ' not'、"'s"替换为 ' is'，再将标点符号替换为空格。
    根据空格将句子切分为单词的列表，调用translate逐个单词进行翻译"""
    while True:
        sentence = input('请输入查询的句子：')  # 输入查询的句子
        if sentence == '':
            print('查询结束，正在退出...')
            break
        sentence = sentence.replace("n't", ' not').replace("'s", ' is')  # "n't"替换为 ' not'，"'s"替换为 ' is'
        for x in string.punctuation:                # 其他标点符号替换为空格
            sentence = sentence.replace(x, ' ')
        word_list = sentence.split()                     # 根据空格切分句子为单词的列表
        for word in word_list:
            print(*translate(word_dic, word))           # 调用函数翻译并输出释义


def translate_word():
    """调用此函数时，先输出提示信息：'请输入查询的单词：'
    用户可循环输入欲查询翻译的单词，若直接输入回车时，输出'查询结束，正在退出...'。
    输入非空时输出翻译结果"""
    while True:
        word = input('请输入查询的单词：')  # 输入查询的单词
        if word == '':
            print('查询结束，正在退出...')
            break
        else:
            print(*translate(word_dic, word))


if __name__ == '__main__':
    file = './dict.txt'  # 文件名
    word_dic = create_dict(file)  # 调用函数返回字典类型的数据
    print('载入字典数据成功！查询单词请输入“1”，查询句子请输入“2”')
    choice = input()
    if choice == '1':
        translate_word()
    elif choice == '2':
        sentence_to_words()
    else:
        print('输入错误，请重新运行程序！')

